Flash memory is one form of a non-volatile computer storage device that can be electrically erased and reprogrammed. It was developed from conventional electrically erasable programmable read-only memory (EEPROM) and is erased in fairly large blocks before the blocks can be rewritten with new data.
Certain types of flash memory used in memory cards, universal serial bus (USB) flash drives, solid-state drives, and similar products, for general storage and transfer of data. Other types, which allow random access and therefore direct code execution, are used as a replacement for the older EPROM and as an alternative to certain kinds of ROM applications. Example applications of flash memory include personal computers, PDAs, digital audio players, digital cameras, mobile phones, synthesizers, video games, scientific instrumentation, industrial robotics, medical electronics, and the like. In addition to being non-volatile, flash memory offers fast read access times. Its mechanic shock resistance, its high durability, being able to withstand high pressure, temperature, immersion in water etc., has led to popularity over hard disks in portable devices.
When writing a flash memory (i.e., erasing a block of data and reprogramming data to that block), it may be desirable to verify that the write operation was successful and accurate. Conventional flash memory designs have no means for performing an internal verification of write data. In these designs, verification of just written data is performed external to the flash memory at the system or chip level on which the flash memory is instantiated. During this verification, the just written data is usually sent through a low bandwidth interface to an on board microcontroller under firmware control. This typically takes many clock cycles to complete and may result in decreased performance of the system containing the flash memory.